1
1セントの謎と浮動小数点の現実
AI017Lesson 3
00:00

計算物理学における根本的な摩擦は、コンピュータが実数を 2進浮動小数点演算という形式で表現しているため生じます。人間の10進法(十進法)的な思考とは異なり、ハードウェアは値を2進法(バイナリ)で保存します。これにより、 漏れのある抽象化という現象が生じます。たとえば0.1のような単純な小数は正確に表現できません。

1. 浮動小数点の現実

Goでは実数用に2つの主要な型を提供しています: float32 および float64。短い変数宣言構文である price := 0.0を使用する場合、Goはデフォルトで float64を使います。これらの型は正確な数学的値ではなく、現実の近似値です。

0.1 + 0.1 = ?ゴーファー:「なぜ0.2にならないの?」0.0001100110011...

2. 0.1の謎

10進法では$1/3$は無限に繰り返す小数($0.333...$)になります。2進法では0.1という値は 無限に繰り返す分数という形になります。コンピュータのメモリは有限なので、この分数は切り捨てられ、累積誤差が生じます。たとえば$0.1 + 0.2$は正確な$0.3$ではなく、$0.30000000000000004$になります。

警告: 論理回路で浮動小数点数を比較する際には == を使ってはいけません。これらの微細な差異によって比較が失敗するからです。

main.py
TERMINALbash — 80x24
> Ready. Click "Run" to execute.
>